package utn.tsb.tsbxml;

import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.*;

public class CentralWidget extends QFrame {

    private QSplitter splitter;
    private TreeContainer tree;
    private NodeContent content;
    private String path;

    public CentralWidget(){
        QVBoxLayout vbox = new QVBoxLayout(this);
        this.splitter = new QSplitter();
        this.content = new NodeContent();
        this.content.hide();
        this.tree = new TreeContainer(content);
        splitter.addWidget(this.tree);
        splitter.addWidget(this.content);
        vbox.addWidget(this.splitter);
    }

    public void closeFile(){
        this.tree.clear();
    }

    public void newFile(){
        this.tree.clear();
        this.tree.newRootNode();
    }

    public void openFile(){
        QFileDialog.Filter filter = new QFileDialog.Filter("*.xml");
        path = QFileDialog.getOpenFileName(this, "Seleccione el archivo", "", filter);
        try{
            if(path.trim().length() > 0){
                QFile file = new QFile(path);
                if(!file.open(QFile.OpenModeFlag.ReadOnly))
                    return;

                String content = file.readAll().toString();
                file.close();
                content = content.trim().replaceAll("\n", "");
                content = content.replaceAll("\t", "");
                content = content.replaceAll("(\\s){2,}", "");
                XmlParser parser = new XmlParser(content);
                Nodo nodo = parser.parseXml();
                this.tree.clear();
                this.tree.loadTree(nodo);
            }else{
                QMessageBox.information(this, "Archivo No Seleccionado",
                        "No se selecciono ningun archivo, o el archivo seleccionado es incorrecto.");
            }
        }catch(ParsingException pe){
            QMessageBox.information(this, "Archivo Invalido",
                        "No se pudo obtener la estructura del archivo.");
        }
    }

    public void saveFile(){
        QFileDialog.Filter filter = new QFileDialog.Filter("*.xml");
        String path = QFileDialog.getSaveFileName(this, "Guardar Archivo",
                "Selecciona la ubicacion donde guardar el archivo", filter);
        try{
            if(path.trim().length() > 0){
                if(!path.endsWith(".xml")){
                    path = path + ".xml";
                }
                String xml = this.tree.getXmlStructure();
                QFile file = new QFile(path);
                file.open(QFile.OpenModeFlag.WriteOnly);
                file.write(new QByteArray(xml));
                file.flush();
                file.close();
            }
        }catch(Exception e){
            QMessageBox.information(this, "Guardado Incorrecto",
                        "No se pudo guardar el archivo.");
        }
    }

}
